// JavaScript Document
/*DEFINICION DE FUNCIONES Y VARIABLES GLOBALES*/	
	var misZonasHash = new Hashtable(); //hash de todas las zonas, accesible por id de la zona
	var orderTypeMisZonas = "A";

	function createPopUpZona(e, idZona, element,isMenu){

	   PopUpMenuMap = new PopupMenu();
	   
	   var heredado = eval(misZonasHash.get(idZona.toString()).esflota==3);
	   if (indexOfArray(cMapController.getMapActive().getZonasVisiblesId(),idZona.toString())!=-1){
		    PopUpMenuMap.add('Ocultar', function(target) {
		    	cMapController.getMapActive().ocultarZona(idZona.toString());
	   		});
	 	    PopUpMenuMap.add('Localizar en el mapa', function(target) {
	 	    		dejarDeSeguir();
	 	    		cMapController.getMapActive().highlightZonaMarker(idZona.toString());
	  	    });
	   }
	   else {
	   	    PopUpMenuMap.add('Ver y localizar', function(target) {
		   	    	dejarDeSeguir();
		   	    	cMapController.getMapActive().mostrarZona(idZona.toString());
		   	    	cMapController.getMapActive().highlightZonaMarker(idZona.toString());
				//centrar(misZonasHash.get(idZona.toString()).latitud,misZonasHash.get(idPoint.toString()).longitud);
	  	    });
	   	    PopUpMenuMap.add('Ver', function(target) {
	   	    	cMapController.getMapActive().mostrarZona(idZona.toString());     
	  	    });
	   }
	   
	   if (((!heredado)||(LOGIN.objetivo == 3))&&(LOGIN.PERMISOS[8])){
	   		PopUpMenuMap.addSeparator();
	 	    PopUpMenuMap.add('Modificar', function(target) {
	 	    	cMapController.getMapActive().modificarZona(idZona.toString());
	   		});
	   		PopUpMenuMap.add('Eliminar', function(target) {
	      		eliminarZonas(idZona.toString());//es general a los mapas
	   		});
	   }
	   
	   if ((LOGIN.objetivo == 3)&&(LOGIN.PERMISOS[8]) && !LOGIN.isBykom){ //SE PUEDE PUBLICAR	
	   	   PopUpMenuMap.addSeparator();
		   if (parseInt(misZonasHash.get(idZona.toString()).publico))
		   		PopUpMenuMap.add('Dejar de publicar', function(target) {
	      			publicarZonas(false, idZona.toString());//es general a los mapas
	   			});
	   	   else
	   			PopUpMenuMap.add('Publicar', function(target) {
	      			publicarZonas(true, idZona.toString());//es general a los mapas
	  			});
	   }

	   PopUpMenuMap.setSize(140, 0);
	   PopUpMenuMap.bind(element); // target is this pre block
	   PopUpMenuMap.show(e,isMenu);
	   return false;
	   }

/*************************FUNCIONES PARA PANTALLA PRINCIPAL************************/
	
	var reqHandlerMisZonas = null;
	
	function ordenarMisZonas(){
		if (orderTypeMisZonas=="A"){
			orderTypeMisZonas="D";
			cMapController.getMapActive().printTableMisZonas();
			//document.getElementById('orderBTNmisZonas').style.backgroundImage='url(images/minimenu/BTNorderAZ.gif)';
			$j("#orderBTNmisZonas").removeClass().addClass("icono a_z");
		}else{
			orderTypeMisZonas="A";
			cMapController.getMapActive().printTableMisZonas();
			$j("#orderBTNmisZonas").removeClass().addClass("icono z_a");
		}
	}
	
	function OnReadyStateChangeMisZonas(){
		ready = reqHandlerMisZonas.readyState;
		if(ready == READY_STATE_LOADING || ready == READY_STATE_LOADED){
			$j('#divListaZonas').html("<img src='images/loader_accordeon.gif' alt='Cargando...' />");
		}else if (ready == READY_STATE_COMPLETE) {
			misZonasJSON = jQuery.parseJSON(reqHandlerMisZonas.responseText);
			if (misZonasJSON.length != 'undefined') {		
				for (i=0; i<misZonasJSON.length; i++){
					misZonasHash.put(misZonasJSON[i].id.toString(), misZonasJSON[i]);
				}				
				for(var i=0;i<cMapController.getMaps().length;i++){
					if(cMapController.getMapasVisibles().length>0){
						iMapaVisible = cMapController.getMapasVisibles()[i];
					}else{
						iMapaVisible = i;
					}
					cMapController.getMapById(iMapaVisible).refreshViewZonas();
				}
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
			/**
			 * Si tiene permiso para visualizar rutas, Carga mis rutas 
			 */
			if (LOGIN.PERMISOS[20]){
				dinamicIncludes_Map.setMessage('Cargando Mis Rutas...');
				cMapController.cargarMisRutas();
			}else{
				cMapController.finCargaInicial();
			}
		}
	}
	
	function CargarMisZonas() {
    	reqParamMisZonas = "COMMAND=MISZONAS";
    	reqParamMisZonas += "&CUENTA=" + LOGIN.cuentaFk;
		reqParamMisZonas += "&ESFLOTA=" + LOGIN.objetivoDB;
		reqParamMisZonas += "&OBJETIVO="+ LOGIN.objetivo;
		reqParamMisZonas += "&TABLAID="+ LOGIN.tablaId;
		reqParamMisZonas += "&ISBYKOM="+ LOGIN.isBykom;
    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    	if (msie) 
            reqHandlerMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
        else
            reqHandlerMisZonas = new XMLHttpRequest();
        reqHandlerMisZonas.onreadystatechange = OnReadyStateChangeMisZonas;    
        reqHandlerMisZonas.open("POST", "querycontroller.php", true);
        reqHandlerMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
		reqHandlerMisZonas.send(reqParamMisZonas);
		
    }
	
	

	/*************************FUNCIONES PARA PANTALLA NUEVA ZONA************************/
	function addIconVerticeZona(icon) { // Agregar atributos al icon vertice de zona
	   icon.iconSize = new GSize(11, 11);
 	   icon.dragCrossSize = new GSize(0, 0);
       icon.shadowSize = new GSize(11, 11);
       icon.iconAnchor = new GPoint(5, 5);
    }
	/*************************FUNCIONES PARA GUARDAR UNA ZONA************************/
	var reqHandlerSaveMisZonas = null;
	
	function OnReadyStateChangeSaveMisZonas(){
		ready = reqHandlerSaveMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			nuevaZonaJSON = jQuery.parseJSON(reqHandlerSaveMisZonas.responseText);
			if (nuevaZonaJSON.id != -1) {	
				misZonasHash.put(nuevaZonaJSON.id.toString(),nuevaZonaJSON);
				alert('Grabacion realizada con exito!');
				if (indexOfArray(cMapController.getMapActive().getZonasVisiblesId(),nuevaZonaJSON.id.toString())==-1) //La zona estaba invisible .:. la marco como visible
					cMapController.getMapActive().getZonasVisiblesId().push(nuevaZonaJSON.id.toString());
				marker = cMapController.getMapActive().getZonasMarkersHash().get(nuevaZonaJSON.id.toString());
				if ((marker!=null)&&(marker!='undefined')){ //La marca de zona estaba creada, es una modificacion...
					//remuevo la vieja marca de zona del registro
					cMapController.getMapActive().getZonasMarkersHash().remove(nuevaZonaJSON.id.toString());
				}			
				cMapController.getMapActive().cleanEstadoNuevaZona();
				cMapController.getMapActive().refreshViewZonas();
			}
			else{
				document.getElementById('newZonaErrorDisplay').innerHTML = 'Ocurrio un error en la DB al tratar de guardar la zona.'
				showDiv('newZonaErrorDisplay');
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}
	
	function guardarZona() {
		hideDiv('newZonaErrorDisplay');
		document.getElementById("newZonaErrorDisplay").innerHTML = "";
		if (cMapController.getMapActive().validarNuevaZona()){		
			es_flota = 0;
			es_publico = 0;
			if (parseInt(LOGIN.objetivo) == 3){
				es_flota=1;
				if(!LOGIN.isBykom){
					if(document.getElementById('zonaPublicaCHK').checked)
						es_publico = 1;	
				}
			}
			puntosLNG = new Array();
			puntosLAT = new Array();
			for (i=0; i < cMapController.getMapActive().getNewZonaPoints().length; i++){ 
				puntosLNG[i]=cMapController.getMapActive().getNewZonaPoints()[i].lon.toString().substr(0,11);
				puntosLAT[i]=cMapController.getMapActive().getNewZonaPoints()[i].lat.toString().substr(0,11);
			}
	    	reqParamMisZonas = "COMMAND=SAVE";
    		reqParamMisZonas += "&ORDERID="+document.getElementById('zonaIdHID').value;
			reqParamMisZonas += "&NOMBRE="+document.getElementById('nombreZona').value;
	    	reqParamMisZonas += "&LATITUDES="+puntosLAT.toString();
			reqParamMisZonas += "&LONGITUDES="+puntosLNG.toString();
    		reqParamMisZonas += "&DATOS="+document.getElementById('descZona').value;
    		reqParamMisZonas += "&FLOTAID="+LOGIN.cuentaFk;
			reqParamMisZonas += "&COLOR="+document.getElementById('colorZonaId').value;
			reqParamMisZonas += "&PUBLICO="+es_publico;
			reqParamMisZonas += "&ESFLOTA="+LOGIN.objetivoDB;
			reqParamMisZonas += "&TABLAID="+LOGIN.tablaId;
			reqParamMisZonas += "&OBJETIVO="+LOGIN.objetivo;
			reqParamMisZonas += "&ISBYKOM="+LOGIN.isBykom;
			if(LOGIN.isBykom){
				reqParamMisZonas += "&TOLERANCIA="+$j("#toleranciaMisZonas").val();
			}
    		autoRefreshFlag = 1;
	    	$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
    		if (msie) 
        	    reqHandlerSaveMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	        else
    	        reqHandlerSaveMisZonas = new XMLHttpRequest();			
			reqHandlerSaveMisZonas.onreadystatechange = OnReadyStateChangeSaveMisZonas;    
	        reqHandlerSaveMisZonas.open("POST", "persistirzona.php", true);
    	    reqHandlerSaveMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
			reqHandlerSaveMisZonas.send(reqParamMisZonas);
		}
    }
	
		/*************************FUNCIONES PARA ELIMINAR LAS ZONAS SELECCIONADAS************************/
	var reqHandlerDeleteMisZonas = null;
	var deleteZonaId = null;
	
	function OnReadyStateChangeDeleteMisZonas(){
		ready = reqHandlerDeleteMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			deleteResponse = jQuery.parseJSON(reqHandlerDeleteMisZonas.responseText);
			if (deleteResponse){
				if(deleteZonaId==null){ //se ejecuto con minimenu
				 	cMapController.getMapActive().ocultarZonasSeleccionadas();
	  			    //ahora remuevo las zonas y las marcas que ya fueron eliminadas de sus respectivos arrays
				 	for (var i=0; i < cMapController.getMapActive().getZonasSeleccionadasId().length; i++){
						misZonasHash.remove(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString());
					 	if (cMapController.getMapActive().getZonasMarkersHash().containsKey(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString())){
							 if (cMapController.getMapActive().getMap().getLayerIndex(cMapController.getMapActive().getZonasMarkersHash().get(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString()))!=-1)
							 	cMapController.getMapActive().getMap().removeLayer(cMapController.getMapActive().getZonasMarkersHash().get(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString()));
							 cMapController.getMapActive().getZonasMarkersHash().remove(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString());
					 	}
				 	}
				 	cMapController.getMapActive().setZonasSeleccionadasId( new Array());					
				}
				else{ //se ejecuto desde POPUP MENU
					pos=indexOfArray(cMapController.getMapActive().getZonasSeleccionadasId(),deleteZonaId.toString());
				    if (pos!=-1)
				    	cMapController.getMapActive().getZonasSeleccionadasId().splice(pos,1);
				    cMapController.getMapActive().ocultarZona(deleteZonaId.toString);
					misZonasHash.remove(deleteZonaId.toString());
					if (cMapController.getMapActive().getZonasMarkersHash().containsKey(deleteZonaId.toString())){
						cMapController.getMapActive().getMap().removeLayer(cMapController.getMapActive().getZonasMarkersHash().get(deleteZonaId.toString()));
						cMapController.getMapActive().getZonasMarkersHash().remove(deleteZonaId.toString());
					}					
					deleteZonaId = null;
				}
				cMapController.getMapActive().refreshViewZonas();				
			}
			else {
				alert ("Error en consulta a DB: No se pudieron eliminar las zonas seleccionados");
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}
	
	function eliminarZonas(zonaId) {
		var sZonas = "";
		if(zonaId != null){
			sZonas = zonaId;
		}else{
			if(cMapController.getMapActive().getZonasSeleccionadasId().length>0){
				sZonas += cMapController.getMapActive().getZonasSeleccionadasId().join(",");
			}
			if(cMapController.getMapActive().getZonasSeleccionadasHeredadasId().length>0){
				if(sZonas!=""){
					sZonas+=",";
				}
				sZonas += cMapController.getMapActive().getZonasSeleccionadasHeredadasId().join(",");
			}
		}
		$j.ajax({
			type: "POST",
			url: "querycontroller.php",
			data: "COMMAND=VERIFICAREGLA&IDENTIFICADOR="+sZonas+"&TIPOREGLA=0&ISBYKOM="+LOGIN.isBykom+"",
			beforeSend: function(){
			},
			success: function(data) {
				$j('#LoaderAjax').hide();
				data = jQuery.parseJSON(data);
				if(data!=0){
					alert("No puede eliminar una zona que tiene una logistica asociada");
				}else{
					eliminarZonasOK(zonaId);
				}
			}
		});
	}
	function eliminarZonasOK(zonaId){
		 deleteZonaId = null;
		 if ((cMapController.getMapActive().getZonasSeleccionadasId().length>0)||(zonaId!=null)){
			 if (cMapController.getMapActive().getZonasSeleccionadasHeredadasId().length>0){
				 alert ('Entre su seleccion existen zonas que no tienen permisos para realizar esta operacion.');
			 }
			 conf = confirm('Esta a punto de eliminar la/las zonas seleccionadas. ¿Desea continuar de todas formas?');
			 if (conf){
		    	reqParamsMisZonas = "COMMAND=DELETE";
				if (zonaId!=null){
					reqParamsMisZonas += "&ORDERID="+zonaId.toString();
					deleteZonaId = zonaId.toString();
				}else{
					reqParamsMisZonas += "&ORDERID="+cMapController.getMapActive().getZonasSeleccionadasId().join(",");
				}
				
				reqParamsMisZonas 	+= "&OBJETIVO="+LOGIN.objetivo;
				reqParamsMisZonas 	+= "&CUENTAID="+LOGIN.tablaId;
				reqParamsMisZonas	+= "&ISBYKOM="+LOGIN.isBykom;
				
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie) 
    	    	    reqHandlerDeleteMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDeleteMisZonas = new XMLHttpRequest();
	        	reqHandlerDeleteMisZonas.onreadystatechange = OnReadyStateChangeDeleteMisZonas;    
		        reqHandlerDeleteMisZonas.open("POST", "persistirzona.php", true);
    		    reqHandlerDeleteMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDeleteMisZonas.send(reqParamsMisZonas);
			}
		 }else{
		 	if (cMapController.getMapActive().getZonasSeleccionadasHeredadasId().length>0)
				alert ('No esta permitido realizar esta operacion para las zonas seleccionados.');
			else
		 		alert ('Debe seleccionar por lo menos una zona para poder realizar esta operacion.');
		 }
    }


	/*************************FUNCIONES PARA PUBLICAR/DESPUBLICAR LAS ZONAS SELECCIONADAS************************/
	var reqHandlerPublicarMisZonas = null;
	var publicarZonaId = null;
	
	function OnReadyStateChangePublicarMisZonas(){
		ready = reqHandlerPublicarMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			publicarResponse = jQuery.parseJSON(reqHandlerPublicarMisZonas.responseText);
			if ((publicarResponse!=null)&&(publicarResponse!=-1)&&(publicarResponse!='undefined')){ // se pudo realizar la operacion, retorna 1 si se publico y 0 si se des-publico.
				if(publicarZonaId==null){ //se ejecuto con minimenu
					 //ahora cambio el valor de las zonas por el devuelto (0 o 1)
				 	for (i=0; i<cMapController.getMapActive().getZonasSeleccionadasId().length; i++){
						 if (misZonasHash.containsKey(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString()))
					 		 misZonasHash.get(cMapController.getMapActive().getZonasSeleccionadasId()[i].toString()).publico=publicarResponse;
				 	}
				}
				else{ // se ejecuto con POPUP MENU
					if (misZonasHash.containsKey(publicarZonaId.toString()))
					 	misZonasHash.get(publicarZonaId.toString()).publico=publicarResponse;
					publicarZonaId = null;
				}
				cMapController.getMapActive().refreshViewZonas();		
			}else {
				alert ("Error en consulta a DB: No se pudieron publicar las zonas seleccionadas");
			}
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}
	
	function publicarZonas(publicar, zonaId) { //si publicar=true las zonas se publican, caso contrario se des-publican
		 publicarZonaId = null;
		 if ((cMapController.getMapActive().getZonasSeleccionadasId().length>0)||(zonaId!=null)){			 
			msj = 'Esta a punto de publicar la/las zonas seleccionadas. ¿Desea continuar de todas formas?';
			if (!publicar)
				msj = 'Esta a punto de dejar de publicar la/las zonas seleccionados. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
				valuePub=0;
				if (publicar)
					valuePub=1;
		    	reqParamsMisZonas = "COMMAND=PUBLICAR";
				if(zonaId!=null){
					reqParamsMisZonas += "&ORDERID="+zonaId.toString();
					publicarZonaId = zonaId.toString();
				}
				else
	    			reqParamsMisZonas += "&ORDERID="+cMapController.getMapActive().getZonasSeleccionadasId().join(",");
				reqParamsMisZonas += "&PUBLICAR="+valuePub;
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie) 
    	    	    reqHandlerPublicarMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerPublicarMisZonas = new XMLHttpRequest();
	        	reqHandlerPublicarMisZonas.onreadystatechange = OnReadyStateChangePublicarMisZonas;    
		        reqHandlerPublicarMisZonas.open("POST", "persistirzona.php", true);
    		    reqHandlerPublicarMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerPublicarMisZonas.send(reqParamsMisZonas);
			}
		 }
		 else
		 	alert ('Debe seleccionar por lo menos una zona para poder realizar esta operacion.');
    }
	
	/*************************FUNCIONES PARA CONFIGURAR COMO VISIBLES POR DEFECTO LAS ZONAS SELECCIONADAS************************/
	var reqHandlerDefaultMisZonas = null;
	
	function OnReadyStateChangeDefaultMisZonas(){
		ready = reqHandlerDefaultMisZonas.readyState;
		if (ready == READY_STATE_COMPLETE) {
			$j("#iconoMapa").removeClass().addClass("icono_mapa");
			autoRefreshFlag = 0;
		}
	}
	
	function defaultZonasSeleccionadas() { 			 
			msj = 'Esta a punto de configurar el/todas las zonas seleccionadas como visible por defecto. ¿Desea continuar de todas formas?';
			conf = confirm(msj);
			if (conf){
		    	reqParamsMisZonas = "COMMAND=CHANGEZONAS";
				reqParamsMisZonas += "&CUENTA="+ LOGIN.cuentaFk;
				reqParamsMisZonas += "&ESFLOTA="+ LOGIN.objetivoDB;
				reqParamsMisZonas += "&OBJETIVO="+ LOGIN.objetivo;
				reqParamsMisZonas += "&TABLAID="+ LOGIN.tablaId;	
				var zonasSelMixtaId = "";
				if (cMapController.getMapActive().getZonasSeleccionadasId().length>0){
					zonasSelMixtaId += cMapController.getMapActive().getZonasSeleccionadasId().toString();
					if (cMapController.getMapActive().getZonasSeleccionadasHeredadasId().length>0)
						zonasSelMixtaId +=",";
				}
				zonasSelMixtaId += cMapController.getMapActive().getZonasSeleccionadasHeredadasId().toString();
				reqParamsMisZonas += "&ZONASID="+zonasSelMixtaId;
    			autoRefreshFlag = 1;
	    		$j("#iconoMapa").removeClass().addClass("icono_mapa_activo");
	    		if (msie) 
    	    	    reqHandlerDefaultMisZonas = new ActiveXObject("Microsoft.XMLHTTP");
	    	    else
    	    	    reqHandlerDefaultMisZonas = new XMLHttpRequest();
	        	reqHandlerDefaultMisZonas.onreadystatechange = OnReadyStateChangeDefaultMisZonas;    
		        reqHandlerDefaultMisZonas.open("POST", "sections/queryConfig.php", true);
    		    reqHandlerDefaultMisZonas.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
				reqHandlerDefaultMisZonas.send(reqParamsMisZonas);
			}
    }
	
	//DECLARACION DE EVENTOS
	function initMisZonasEvents() {
			//Nueva Zona
			OpenLayers.Control.NewZona = OpenLayers.Class(OpenLayers.Control, {                
                defaultHandlerOptions: {
                    'single': true,
                    'double': false,
                    'pixelTolerance': 0,
                    'stopSingle': false,
                    'stopDouble': false
                },
 
                initialize: function(options) {
                    this.handlerOptions = OpenLayers.Util.extend(
                        {}, this.defaultHandlerOptions
                    );
                    OpenLayers.Control.prototype.initialize.apply(
                        this, arguments
                    ); 
                    this.handler = new OpenLayers.Handler.Click(
                        this, {
                            'click': this.onClick
                        }, this.handlerOptions
                    );
                }, 
 
                onClick: function(e) {
					var pixel = new OpenLayers.Pixel(e.xy.x, e.xy.y);
                    var lonlat = cMapController.getMapActive().getMap().getLonLatFromPixel(pixel);
					cMapController.getMapActive().zonaAddVertice(lonlat);
                }
 
            });
			
	}

	